'''
    自动存取款机
    1.登陆系统
    2.查询余额
    3.存钱
    4. 取钱
    5.退出系统
    6.界面和交互
'''
# 1.银行账号数据源 ：  账号，密码，姓名，余额
account_list = [
    {'user':'01','pw':'01','name':'zhangsan','money':123456},
    {'user':'02','pw':'02','name':'lisi','money':6783},
    {'user':'03','pw':'03','name':'wangwu','money':200}]

# 定义一个空列表的目的是让ＡＴＭ记住当前登陆的用户信息
user_list = []
# 1.登陆系统
def login():
    '''
    判断登陆信息是否存在用户数据中，并临时记录在user_list中
    :return:
    '''
    # 声明user_list是全局变量，方便登陆函数添加当前登陆用户的信息给其他函数用
    global user_list
    # 等待用户输入自己的账号密码
    key_u = input('请输入用户名：')
    key_p = input('请输入密码：')
    # 用遍历和枚举得到一个索引序列，数据下标
    for i, user_dict in enumerate(account_list):
        # 判断用户输入的信息是否存在         !!!
        if user_dict['user'] == key_u and user_dict['pw'] == key_p:
            # 当用户的信息存在后，把索引和user存到user_list列表中
            user_list.append(user_dict)

    # 判断列表是不是为空
    if user_list != []:
        # 不为空是，代表用户输入的用户存在，则提示登陆成功
        print('{:^76}'.format('------登陆成功------\n'))
    # 否则就是没有找到用户的数据，代表密码或账户错误
    else:
        # 提示用户需不需要重新输入，输入y重新引用本函数，否则结束本函数
        if input('您输入的密码有误，是否重新输入？y/n') == 'y':
            login()
        elif input('您输入的密码有误，是否重新输入？y/n') == 'n':
            print('*'*10,'您已退出系统，感谢您的使用！','*'*10)

# 2.查询余额
def show_money():
    print(' '*20,'您的账户余额为{:^10}元!'.format(account_list[0]['money']))

# 3.存钱
def save_moeny():
    key_sm = float(input('请输入您的存款金额：'))
    # is_integer()判断一个浮点是否为整数，小数为FALSE
    if key_sm.is_integer() == False:
        print('请输入整数！！！')
        save_moeny()
    else:
        # 把用户输入的整数加到用户数据中，用户数据的定位也来自登入提供的临时列表
        user_list[0]['money'] += key_sm
        print('=' * 78)
        # 使用format占位
        print(' ' * 28, '您已成功存款{:^8}元!'.format(key_sm))
        print('=' * 78)

# 4.取钱
def draw_money():
    key_dm = float(input('请输入您的取款金额：'))
    # 判断输入的是否为整数，整数返回True
    if key_dm.is_integer() == False:
        print('请输入整数！！！')
        draw_money()

    # 判断余额是否大于取款金额，当账户余额充足，执行取款
    if user_list[0]['money'] >= key_dm:
        user_list[0]['money'] -= key_dm
        print('=' * 78)
        print(' ' * 28, '您已成功取款{:^8}元!'.format(key_dm))
        print('=' * 78)
    else:  # 当用户余额不足时，告知，并结束本函数
        print('=' * 78)
        print('{:^78}'.format('余额不足!!!'))
        print('=' * 78)

# 5.退出系统
def loginOut():
    print('='*78)
    print('='*38,'感谢您的使用，再见！！！','='*28)
    print('=' * 78)

# 6.界面与交互
while True:
    # 输出初始界面
    print('='*15,'ATM系统','='*15)
    print('{:1}{:13}{:13}'.format(' ','1.用户登陆','2.查询余额'))
    print('{:1}{:13}{:13}'.format(' ', '3.存款', '　4.取款'))
    print('{:1}{:13}'.format(' ', '5.退出系统'))
    print('='*40)
    key = input('请输入对应的选择：')
    # 根据输入操作值，执行相应操作
    if key == '1':
        print('=' * 12, '登陆界面', '=' * 12)
        login()
        input('按回车继续：')

    elif key == '2':
        print('=' * 12, '查询余额界面', '=' * 12)
        show_money()
        input('按回车继续：')

    elif key == '3':
        print('=' * 15, '存款界面', '=' * 15)
        save_moeny()
        input('按回车继续：')

    elif key == '4':
        print('=' * 15, '取款界面', '=' * 15)
        draw_money()
        input('按回车继续：')

    elif key == '5':
        loginOut()
        break
    else:
        # 如果输入指定意外的案件，提醒有误
        print('输入有误，请重新输入！！！')